From c251c9a7fd5bc3735eddb1c83410a6626dc82074 Mon Sep 17 00:00:00 2001 From: robertlipe Date: Thu, 18 Jul 2013 02:16:35 +0000 Subject: [PATCH] Let nmea, itracku round time on read. Regnerate reference/track/nmea.gpx. git-svn-id: http://gpsbabel.googlecode.com/svn/trunk@4452 f51c46e8-681c-474f-0cfe-069cfd0219fb --- gpsbabel/itracku.cc | 14 ++-- gpsbabel/nmea.cc | 29 ++++--- gpsbabel/reference/track/nmea.gpx | 130 +++++++++++++++--------------- 3 files changed, 89 insertions(+), 84 deletions(-) diff --git a/gpsbabel/itracku.cc b/gpsbabel/itracku.cc index 36e1402e0..918abd72b 100644 --- a/gpsbabel/itracku.cc +++ b/gpsbabel/itracku.cc @@ -659,15 +659,17 @@ itracku_rt_init(const char* fname) } static void -nmea_set_waypoint_time(waypoint* wpt, struct tm* time, int microseconds) +nmea_set_waypoint_time(waypoint* wpt, struct tm* time, double fsec) { + //fractions are stored as ms + int us = MILLI_TO_MICRO(lround(1000*fsec)); if (time->tm_year == 0) { - wpt->SetCreationTime(((((time_t)time->tm_hour * 60) + time->tm_min) * 60) + time->tm_sec, microseconds); + wpt->SetCreationTime(((((time_t)time->tm_hour * 60) + time->tm_min) * 60) + time->tm_sec, us); if (wpt->wpt_flags.fmt_use == 0) { wpt->wpt_flags.fmt_use = 1; } } else { - wpt->SetCreationTime(mkgmtime(time), microseconds); + wpt->SetCreationTime(mkgmtime(time), us); if (wpt->wpt_flags.fmt_use != 0) { wpt->wpt_flags.fmt_use = 0; } @@ -684,7 +686,7 @@ gprmc_parse(char* ibuf) unsigned int dmy; double speed,course; waypoint* waypt; - double microseconds; + double fsec; struct tm tm; int rc = sscanf(ibuf,"$GPRMC,%lf,%c,%lf,%c,%lf,%c,%lf,%lf,%u", @@ -696,7 +698,7 @@ gprmc_parse(char* ibuf) return NULL; } - microseconds = MILLI_TO_MICRO(1000 * (hms - (int)hms)); + fsec = hms - (int)hms; tm.tm_sec = (long) hms % 100; hms = hms / 100; @@ -716,7 +718,7 @@ gprmc_parse(char* ibuf) WAYPT_SET(waypt, course, course); - nmea_set_waypoint_time(waypt, &tm, microseconds); + nmea_set_waypoint_time(waypt, &tm, fsec); if (latdir == 'S') { latdeg = -latdeg; diff --git a/gpsbabel/nmea.cc b/gpsbabel/nmea.cc index d688176d4..fb4020308 100644 --- a/gpsbabel/nmea.cc +++ b/gpsbabel/nmea.cc @@ -356,16 +356,18 @@ nmea_wr_deinit(void) } static void -nmea_set_waypoint_time(waypoint* wpt, struct tm* time, int microseconds) +nmea_set_waypoint_time(waypoint* wpt, struct tm* time, double fsec) { + //fractions are stored as ms + int us = MILLI_TO_MICRO(lround(1000*fsec)); if (time->tm_year == 0) { - wpt->SetCreationTime(((((time_t)time->tm_hour * 60) + time->tm_min) * 60) + time->tm_sec, microseconds); + wpt->SetCreationTime(((((time_t)time->tm_hour * 60) + time->tm_min) * 60) + time->tm_sec, us); if (wpt->wpt_flags.fmt_use == 0) { wpt->wpt_flags.fmt_use = 1; without_date++; } } else { - wpt->SetCreationTime(mkgmtime(time), microseconds); + wpt->SetCreationTime(mkgmtime(time), us); if (wpt->wpt_flags.fmt_use != 0) { wpt->wpt_flags.fmt_use = 0; without_date--; @@ -376,7 +378,8 @@ nmea_set_waypoint_time(waypoint* wpt, struct tm* time, int microseconds) static void gpgll_parse(char* ibuf) { - double latdeg, lngdeg, microseconds; + double latdeg, lngdeg; + double fsec; char lngdir, latdir; double hmsd; int hms; @@ -399,7 +402,7 @@ gpgll_parse(char* ibuf) hms = (int) hmsd; last_read_time = hms; - microseconds = MILLI_TO_MICRO(1000 * (hmsd - hms)); + fsec = hmsd - hms; tm.tm_sec = hms % 100; hms = hms / 100; @@ -409,7 +412,7 @@ gpgll_parse(char* ibuf) waypt = waypt_new(); - nmea_set_waypoint_time(waypt, &tm, microseconds); + nmea_set_waypoint_time(waypt, &tm, fsec); if (latdir == 'S') { latdeg = -latdeg; @@ -437,7 +440,7 @@ gpgga_parse(char* ibuf) double hdop; char altunits; waypoint* waypt; - double microseconds; + double fsec; if (trk_head == NULL) { trk_head = route_head_alloc(); @@ -460,7 +463,7 @@ gpgga_parse(char* ibuf) } last_read_time = hms; - microseconds = MILLI_TO_MICRO(1000 * (hms - (int)hms)); + fsec = hms - (int)hms; tm.tm_sec = (long) hms % 100; hms = hms / 100; @@ -470,7 +473,7 @@ gpgga_parse(char* ibuf) waypt = waypt_new(); - nmea_set_waypoint_time(waypt, &tm, microseconds); + nmea_set_waypoint_time(waypt, &tm, fsec); if (latdir == 'S') { latdeg = -latdeg; @@ -517,7 +520,7 @@ gprmc_parse(char* ibuf) unsigned int dmy; double speed,course; waypoint* waypt; - double microseconds; + double fsec; char* dmybuf; int i; @@ -554,7 +557,7 @@ gprmc_parse(char* ibuf) sscanf(dmybuf,"%u", &dmy); last_read_time = hms; - microseconds = MILLI_TO_MICRO(1000 * (hms - (int)hms)); + fsec = hms - (int)hms; tm.tm_sec = (long) hms % 100; hms = hms / 100; @@ -579,7 +582,7 @@ gprmc_parse(char* ibuf) } /* The change of date wasn't recorded when * going from 235959 to 000000. */ - nmea_set_waypoint_time(curr_waypt, &tm, microseconds); + nmea_set_waypoint_time(curr_waypt, &tm, fsec); } /* This point is both a waypoint and a trackpoint. */ if (amod_waypoint) { @@ -595,7 +598,7 @@ gprmc_parse(char* ibuf) WAYPT_SET(waypt, course, course); - nmea_set_waypoint_time(waypt, &tm, microseconds); + nmea_set_waypoint_time(waypt, &tm, fsec); if (latdir == 'S') { latdeg = -latdeg; diff --git a/gpsbabel/reference/track/nmea.gpx b/gpsbabel/reference/track/nmea.gpx index 42ec83cb4..adec90fd1 100644 --- a/gpsbabel/reference/track/nmea.gpx +++ b/gpsbabel/reference/track/nmea.gpx @@ -160,7 +160,7 @@ 208.400000 - + 140.759995 0.083333 3d @@ -171,7 +171,7 @@ 208.400000 - + 143.919998 0.083333 3d @@ -182,7 +182,7 @@ 208.300000 - + 140.850006 0.083333 3d @@ -193,7 +193,7 @@ 208.200000 - + 145.270004 0.083333 3d @@ -204,7 +204,7 @@ 208.000000 - + 145.610001 0.083333 3d @@ -215,7 +215,7 @@ 207.900000 - + 145.139999 0.083333 3d @@ -226,7 +226,7 @@ 207.800000 - + 143.490005 0.083333 3d @@ -237,7 +237,7 @@ 207.700000 - + 145.089996 0.111111 3d @@ -248,7 +248,7 @@ 207.800000 - + 143.000000 0.083333 3d @@ -259,7 +259,7 @@ 207.900000 - + 144.100006 0.083333 3d @@ -270,7 +270,7 @@ 208.200000 - + 142.360001 0.111111 3d @@ -281,7 +281,7 @@ 208.600000 - + 139.899994 0.083333 3d @@ -292,7 +292,7 @@ 209.200000 - + 145.610001 0.111111 3d @@ -303,7 +303,7 @@ 209.800000 - + 143.770004 0.111111 3d @@ -314,7 +314,7 @@ 210.600000 - + 144.649994 0.111111 3d @@ -325,7 +325,7 @@ 211.400000 - + 144.570007 0.111111 3d @@ -336,7 +336,7 @@ 212.200000 - + 144.350006 0.083333 3d @@ -523,7 +523,7 @@ 212.600000 - + 141.190002 0.111111 3d @@ -534,7 +534,7 @@ 212.900000 - + 142.600006 0.083333 3d @@ -545,7 +545,7 @@ 213.400000 - + 142.809998 0.111111 3d @@ -556,7 +556,7 @@ 213.800000 - + 140.440002 0.111111 3d @@ -567,7 +567,7 @@ 214.200000 - + 142.369995 0.111111 3d @@ -578,7 +578,7 @@ 214.700000 - + 139.389999 0.111111 3d @@ -589,7 +589,7 @@ 215.000000 - + 139.869995 0.111111 3d @@ -600,7 +600,7 @@ 215.200000 - + 141.369995 0.111111 3d @@ -611,7 +611,7 @@ 215.200000 - + 139.160004 0.111111 3d @@ -622,7 +622,7 @@ 215.200000 - + 142.389999 0.111111 3d @@ -633,7 +633,7 @@ 215.200000 - + 140.449997 0.111111 3d @@ -644,7 +644,7 @@ 215.100000 - + 141.089996 0.083333 3d @@ -655,7 +655,7 @@ 214.800000 - + 140.729996 0.111111 3d @@ -666,7 +666,7 @@ 214.600000 - + 137.970001 0.111111 3d @@ -677,7 +677,7 @@ 214.300000 - + 144.869995 0.111111 3d @@ -688,7 +688,7 @@ 214.000000 - + 137.610001 0.083333 3d @@ -1062,7 +1062,7 @@ 223.800000 - + 142.240005 0.111111 3d @@ -1073,7 +1073,7 @@ 224.800000 - + 142.729996 0.111111 3d @@ -1084,7 +1084,7 @@ 225.700000 - + 141.520004 0.083333 3d @@ -1095,7 +1095,7 @@ 226.400000 - + 141.429993 0.111111 3d @@ -1106,7 +1106,7 @@ 227.000000 - + 137.690002 0.111111 3d @@ -1117,7 +1117,7 @@ 227.500000 - + 144.580002 0.083333 3d @@ -1128,7 +1128,7 @@ 227.900000 - + 144.809998 0.111111 3d @@ -1139,7 +1139,7 @@ 228.200000 - + 143.139999 0.111111 3d @@ -1150,7 +1150,7 @@ 228.300000 - + 143.270004 0.111111 3d @@ -1161,7 +1161,7 @@ 228.400000 - + 139.119995 0.111111 3d @@ -1172,7 +1172,7 @@ 228.300000 - + 140.070007 0.111111 3d @@ -1183,7 +1183,7 @@ 228.100000 - + 144.720001 0.111111 3d @@ -1194,7 +1194,7 @@ 227.800000 - + 140.800003 0.111111 3d @@ -1205,7 +1205,7 @@ 227.500000 - + 143.259995 0.111111 3d @@ -1216,7 +1216,7 @@ 227.200000 - + 138.809998 0.111111 3d @@ -1227,7 +1227,7 @@ 226.800000 - + 143.110001 0.111111 3d @@ -1425,7 +1425,7 @@ 224.500000 - + 141.300003 0.111111 3d @@ -1436,7 +1436,7 @@ 224.700000 - + 141.190002 0.111111 3d @@ -1447,7 +1447,7 @@ 225.000000 - + 143.009995 0.111111 3d @@ -1458,7 +1458,7 @@ 225.200000 - + 140.809998 0.111111 3d @@ -1469,7 +1469,7 @@ 225.300000 - + 140.789993 0.111111 3d @@ -1480,7 +1480,7 @@ 225.300000 - + 141.429993 0.111111 3d @@ -1491,7 +1491,7 @@ 225.300000 - + 142.300003 0.111111 3d @@ -1502,7 +1502,7 @@ 225.200000 - + 140.809998 0.083333 3d @@ -1513,7 +1513,7 @@ 225.200000 - + 142.399994 0.111111 3d @@ -1524,7 +1524,7 @@ 225.200000 - + 140.330002 0.083333 3d @@ -1535,7 +1535,7 @@ 225.100000 - + 137.770004 0.083333 3d @@ -1546,7 +1546,7 @@ 225.000000 - + 142.289993 0.111111 3d @@ -1557,7 +1557,7 @@ 224.900000 - + 140.869995 0.111111 3d @@ -1568,7 +1568,7 @@ 224.700000 - + 141.699997 0.111111 3d @@ -1579,7 +1579,7 @@ 224.500000 - + 141.699997 0.111111 3d @@ -1590,7 +1590,7 @@ 224.300000 - + 140.330002 0.111111 3d -- 2.30.2